package com.ruoyi.cmdb.service.impl.rabbitmq.direct.config;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration //这也是为了让springboot可以自动加载这个配置类,成为bean对象
public class RabbitConfigDirect {
    @Bean
    public DirectExchange directExchange(){ //这是一个交换机,用于队列连接队列服务;一个交换机可以为多个队列提供绑定服务,只是每次绑定后各自绑定行为的名字不要重复
        return new DirectExchange("cmdbExchange");
    }

    //定义第一个队列
    @Bean
    public Queue directQueue(){//这是一个队列对象 cmdbtestQueue
        return new Queue("cmdbtestQueue",true,false,false);
        //cmdbtestQueue 表明队列名称
        //是否持久化;本次连接mq是否是专用连接,如果true,连接断开,队列删除;是否会在没人生产者和消费者用时自动删除该队列
    }
    @Bean
    public Binding binding(){ //这是一个绑定对象=cmdbExchange+cmdbtestQueue
        return BindingBuilder.bind(directQueue()).to(directExchange()).with("cmdbtestConnection");
        //cmdbtestConnection这是绑定名.虽然生成connection时指明了队列是cmdbtestQueue,但是监听者可以通过这个connection监听同一个交换机上的全部队列
        //按说不合理,但是我试验出来就是这样的.所以,我的做法是给每个队列配备一个交换机,这样就不会导致监听到其他队列了.
    }

    //定义第二个队列
    @Bean
    public DirectExchange directExchangeManual(){ //这是一个交换机,用于队列连接队列服务;一个交换机可以为多个队列提供绑定服务,只是每次绑定后各自绑定行为的名字不要重复
        return new DirectExchange("cmdbExchangeManual");
    }
    @Bean
    public Queue directQueueManual(){//这是一个队列对象
        return new Queue("cmdbtestQueueManual",true,false,false);
        //cmdbtestQueueManual 表明队列名称
        //是否持久化;本次连接mq是否是专用连接,如果true,连接断开,队列删除;是否会在没人生产者和消费者用时自动删除该队列
    }
    @Bean
    public Binding bindingManual(){ //这是一个绑定对象=cmdbExchangeManual+cmdbtestQueueManual
        return BindingBuilder.bind(directQueueManual()).to(directExchangeManual()).with("cmdbtestConnectionManual");
        //cmdbtestConnectionManual这是绑定名
    }
}
